package org.logging.servletlistener;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 
 * <listener> <!-- 监听器类的路径 -->
 * <listener-class>com.ljq.servlet.SessionListener</listener-class> </listener>
 * 当用户通过网络来访问一个网站的时候，如果是首次访问，那么在这个网站的服务器端都会创建一个session来保存一些属于这个用户的信息。
 * 
 * 在创建session的时候其实是会触发一个sessionCreated事件的，同样的，
 * 当用户正常退出或者是用户登陆了不退出并当session生命周期结束的时候，
 * 
 * 就会触发一个sessionDestroyed事件。这两个事件我们可以通过HttpSessionListener监听器来监听到并可以把它捕捉。
 * 
 * @author Administrator
 *
 */
public class SessionListener implements HttpSessionListener {
	// 创建 一个 map 当创建session 时候 获取 sessionID放入map，以便 手动销毁
	public static Map<String, HttpSession> sessionMap = Collections
			.synchronizedMap(new HashMap<String, HttpSession>());

	public void sessionCreated(HttpSessionEvent event) {
		System.out.println("---Session被创建!---");
		//将session 放入 map
		HttpSession session = event.getSession();
		sessionMap.put(session.getId(), session);
	}

	@SuppressWarnings("unchecked")
	public void sessionDestroyed(HttpSessionEvent event) {
		HttpSession session = event.getSession();
		String user = (String) session.getAttribute("user");
		ArrayList<String> users = (ArrayList<String>) session
				.getServletContext().getAttribute("users");
		for (String u : users) {
			// 将这个用户从ServletContext对象中移除
			if (u.equals(user)) {
				users.remove(u);
				break;
			}
		}
		// 将session设置成无效
		session.invalidate();
		System.out.println("一个Session被销毁了!");
	}

}